package com.liuugoqing.creator.singleton.question.reflection;

import org.junit.Test;

import java.lang.reflect.Constructor;

/**
 * 使用反射也可以破坏单例模式，创建出多个对象
 * 方案：当通过反射方式调用构造方法进行创建创建时，直接抛异常。不运行此中操作。
 * @Author : liugq
 * @Date : 2022/6/28 12:05
 * @See : 参考类
 * @Since： JDK1.8
 * @Version : 1.0
 */
public class ReflectionQue {
    @Test
    public void testReflectionQue() throws Exception{
        Class<Singleton> clazz = Singleton.class;
        //获取构造方法，并将访问修饰符关闭
        Constructor<Singleton> declaredConstructor = clazz.getDeclaredConstructor();
        declaredConstructor.setAccessible(true);
        //创造对象
        Singleton singleton1 = declaredConstructor.newInstance();
        Singleton singleton2 = declaredConstructor.newInstance();
        //输出
        System.out.println(singleton1);
        System.out.println(singleton2);
    }
}
